package cn.iocoder.yudao.module.erp.service.purchaseorder;

import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.erp.controller.admin.purchaseorder.vo.PurchaseOrderPageReqVO;
import cn.iocoder.yudao.module.erp.controller.admin.purchaseorder.vo.PurchaseOrderSaveReqVO;
import cn.iocoder.yudao.module.erp.dal.dataobject.purchaseorder.PurchaseOrderDO;
import cn.iocoder.yudao.module.erp.dal.dataobject.purchaseorder.PurchaseOrderGoodsDO;

import javax.validation.Valid;
import java.math.BigDecimal;
import java.util.Collection;
import java.util.List;

/**
 * 采购订单 Service 接口
 *
 * @author maxuxu
 */
public interface PurchaseOrderService {

    /**
     * 创建采购订单
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createPurchaseOrder(@Valid PurchaseOrderSaveReqVO createReqVO);

    /**
     * 更新采购订单
     *
     * @param updateReqVO 更新信息
     */
    void updatePurchaseOrder(@Valid PurchaseOrderSaveReqVO updateReqVO);

    /**
     * 删除采购订单
     *
     * @param id 编号
     */
    void deletePurchaseOrder(Long id);

    /***
     * @author Max-u-19
     * @Description 批量删除
     * @date 20:47 2024/3/5
     **/
    void deleteAnyPurchaseOrder(Collection<Long> ids);

    /**
     * 获得采购订单
     *
     * @param id 编号
     * @return 采购订单
     */
    PurchaseOrderDO getPurchaseOrder(Long id);

    /**
     * 获得采购订单分页
     *
     * @param pageReqVO 分页查询
     * @return 采购订单分页
     */
    PageResult<PurchaseOrderDO> getPurchaseOrderPage(PurchaseOrderPageReqVO pageReqVO);

    // ==================== 子表（采购单和物品的链接表-多对多关系） ====================

    /**
     * 获得采购单和物品的链接表-多对多关系列表
     *
     * @param orderId 订单id
     * @return 采购单和物品的链接表-多对多关系列表
     */
    List<PurchaseOrderGoodsDO> getPurchaseOrderGoodsListByOrderId(Long orderId);

    BigDecimal getSumSaleOrderAmount();

    /**
     * @author Max-u-19
     * @Description 获取已经支付的采购订单
     * @date 11:49 2024/11/27
     * @param syncPay 是否支付
     * @return   BigDecimal
     **/
    BigDecimal getSumSaleOrderAmountBySyncPay(Integer syncPay);}